 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace GestorDeFlotasDesktop
{
    class sqlManager
    {
        #region EstadoInterno

        private static SqlConnection _dbConnection;
        private static string _dbConnectionString;

        #endregion

        #region Conectar

        public static void Conectar()
        {
            _dbConnectionString = "Data Source=localhost\\SQLSERVER2005;" + "Initial Catalog=GD1C2012;" + "User Id=gd;Password=gd2012;";


            _dbConnection = new SqlConnection(_dbConnectionString);
        }

        #endregion

        #region Desconectar

        public static void Desconectar()
        {
            _dbConnectionString = string.Empty;
            _dbConnection.Dispose();
        }

        #endregion

        //---------------------------------------------------
        //Login

        #region ValidarUsuario
        public static int ValidarAcceso(string usuario, string password)
        {
            int valorRetorno = 0;
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_VALIDAR_USUARIO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@usuario", usuario);
            spCmdParams.AddWithValue("@contraseña", password);
            //spCmdParams.AddWithValue("@hayFilas", valorRetorno);
            _dbConnection.Open();
            // spCmd.ExecuteNonQuery();
            valorRetorno = (int)spCmd.ExecuteScalar();
            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return valorRetorno;


        }
        #endregion

        #region ObtenerFuncionalidades

        public static DataTable ObtenerFuncionalidades(string username)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_FUNCIONALIDADES_USUARIO;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;                //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@USUARIO", username);                                   // pone @PARAMETRO



            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();                    //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaUsuario");
            DataColumn colUser = new DataColumn("Funcionalidad");

            dtResult.Columns.Add(colUser);






            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["Descripcion"].ToString() //CORREGIR
                                  );
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        //

        #region ObtenerMarcasAuto
        public static DataTable ObtenerMarcasAuto()
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_OBTENER_MARCAS_AUTO;

            _dbConnection.Open();

            SqlDataReader drResultado = spCmd.ExecuteReader();

            DataTable dtResult = new DataTable("tablaMarca");
            DataColumn ID = new DataColumn("ID");
            DataColumn Marca = new DataColumn("Marca");
            
            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Marca);

            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["ID"].ToString(), drResultado["Marca"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region ObtenerRelojes
        public static DataTable ObtenerRelojes()
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_OBTENER_RELOJES;

            _dbConnection.Open();

            SqlDataReader drResultado = spCmd.ExecuteReader();

            DataTable dtResult = new DataTable("tablaReloj");
            DataColumn ID = new DataColumn("ID");
            DataColumn Reloj = new DataColumn("Reloj");
            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Reloj);

            dtResult.Rows.Add("", "Seleccione un reloj ...");

            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["ID_RELOJ_TAXI"].ToString(), drResultado["MODELO"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region ObtenerRelojesModificacionAuto
        public static DataTable ObtenerRelojesModificacionAuto(string id_auto)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_OBTENER_RELOJES_MODIFICACION_AUTO;
            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_taxi", Convert.ToInt32(id_auto));

            _dbConnection.Open();

            SqlDataReader drResultado = spCmd.ExecuteReader();

            DataTable dtResult = new DataTable("tablaReloj");
            DataColumn ID = new DataColumn("ID");
            DataColumn Reloj = new DataColumn("Reloj");
            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Reloj);

            dtResult.Rows.Add("", "Seleccione un reloj ...");

            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["ID_RELOJ_TAXI"].ToString(), drResultado["MODELO"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region ObtenerTodosLosRelojes
        public static DataTable ObtenerTodosLosRelojes()
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_OBTENER_TODOS_LOS_RELOJES;

            _dbConnection.Open();

            SqlDataReader drResultado = spCmd.ExecuteReader();

            DataTable dtResult = new DataTable("tablaReloj");
            DataColumn Reloj = new DataColumn("Reloj");
            DataColumn ID = new DataColumn("Id");
            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Reloj);

            dtResult.Rows.Add("", "Seleccione un reloj ...");

            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["ID_RELOJ_TAXI"].ToString(), drResultado["MODELO"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region ObtenerMarcasReloj
        public static DataTable ObtenerMarcasReloj()
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_OBTENER_MARCAS_RELOJ;

            _dbConnection.Open();

            SqlDataReader drResultado = spCmd.ExecuteReader();

            DataTable dtResult = new DataTable("tablaMarca");
            DataColumn ID = new DataColumn("ID");
            DataColumn Marca = new DataColumn("Marca");
            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Marca);

            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["ID"].ToString(), drResultado["Marca"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region ObtenerRoles
        public static DataTable ObtenerRoles()
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_OBTENER_ROLES;

            _dbConnection.Open();

            SqlDataReader drResultado = spCmd.ExecuteReader();

            DataTable dtResult = new DataTable("Roles");
            DataColumn colRol = new DataColumn("Rol");
            dtResult.Columns.Add(colRol);

            while (drResultado.Read())
            {
                if(drResultado["estado"].ToString()=="1")
                dtResult.Rows.Add(drResultado["descripcion"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region ObtenerTurnos
        public static DataTable ObtenerTurnos()
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_OBTENER_TURNOS;

            _dbConnection.Open();

            SqlDataReader drResultado = spCmd.ExecuteReader();

            DataTable dtResult = new DataTable("tablaTurnos");
            DataColumn colDescripcion = new DataColumn("Descripcion");
            DataColumn colId = new DataColumn("ID");
            dtResult.Columns.Add(colDescripcion);
            dtResult.Columns.Add(colId);
            
            dtResult.Rows.Add("Seleccione un turno ...", "");

            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["DESCRIPCION"].ToString(), drResultado["ID_TURNO"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        //

        #region ABMs
        #region Auto
        #region BuscarAutos

        public static DataTable ObtenerAutos(string marca,
                                             string modelo,
                                             string patente,
                                             string licencia,
                                             string id_reloj,
                                             int traerTodos)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_BUSCAR_AUTOS;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;    //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@marca", marca);                          // pone @PARAMETRO
            spCmdParams.AddWithValue("@modelo_taxi", modelo);
            spCmdParams.AddWithValue("@patente", patente);
            spCmdParams.AddWithValue("@licencia", licencia);
            if (id_reloj == "")
            {
                spCmdParams.AddWithValue("@id_reloj", -1);
            }
            else
            {
                spCmdParams.AddWithValue("@id_reloj", Convert.ToInt32(id_reloj));
            }
            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaAutos");
            DataColumn ID_Taxi = new DataColumn("ID Taxi");
            DataColumn ID_Marca = new DataColumn("ID Marca");
            DataColumn Modelo = new DataColumn("Modelo");
            DataColumn Patente = new DataColumn("Patente");
            DataColumn Licencia = new DataColumn("Licencia");
            DataColumn Rodado = new DataColumn("Rodado");
            DataColumn Reloj = new DataColumn("Reloj");
            DataColumn Seleccionar = new DataColumn("Selecionar");
            DataColumn Estado = new DataColumn("Estado");

            dtResult.Columns.Add(ID_Taxi);
            dtResult.Columns.Add(ID_Marca);
            dtResult.Columns.Add(Modelo);
            dtResult.Columns.Add(Patente);
            dtResult.Columns.Add(Licencia);
            dtResult.Columns.Add(Rodado);
            dtResult.Columns.Add(Reloj);
            dtResult.Columns.Add(Estado);
            dtResult.Columns.Add(Seleccionar);

            while (drResultado.Read())
            {
                if (traerTodos == 1 || Convert.ToInt32(drResultado["estado"].ToString()) == 1)
                {
                    dtResult.Rows.Add(
                                      drResultado["id_taxi"].ToString(),
                                      drResultado["id_marca_taxi"].ToString(),
                                      drResultado["modelo_taxi"].ToString(),
                                      drResultado["patente"].ToString(),
                                      drResultado["licencia"].ToString(),
                                      drResultado["rodado"].ToString(),
                                      drResultado["id_reloj"].ToString(),
                                      drResultado["estado"].ToString(),
                                      "Seleccionar Auto");
                }
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }

        #endregion

        #region AgregarAuto

        public static int AgregarAuto(string marca,
                                      string modelo,
                                      string patente,
                                      string licencia,
                                      string rodado,
                                      string id_reloj)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ALTA_AUTO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@ID_MARCA_TAXI", Convert.ToInt32(marca));
            spCmdParams.AddWithValue("@MODELO", modelo);
            spCmdParams.AddWithValue("@PATENTE", patente);
            spCmdParams.AddWithValue("@LICENCIA", licencia);
            spCmdParams.AddWithValue("@RODADO", rodado);
            spCmdParams.AddWithValue("@ID_RELOJ", Convert.ToInt32(id_reloj));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion

        #region BajaAuto
        public static int BajaAuto(int id_auto)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_BAJA_AUTO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_taxi", id_auto);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region ModificarAuto
        public static int ModificarAuto(int id_taxi,
                                          string marca,
                                          string modelo,
                                          string patente,
                                          string licencia,
                                          string rodado,
                                          string id_reloj)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_MODIFICACION_AUTO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_taxi", id_taxi);
            spCmdParams.AddWithValue("@id_marca_taxi", Convert.ToInt32(marca));
            spCmdParams.AddWithValue("@modelo_taxi", modelo);
            spCmdParams.AddWithValue("@patente", patente);
            spCmdParams.AddWithValue("@licencia", licencia);
            spCmdParams.AddWithValue("@rodado", rodado);
            spCmdParams.AddWithValue("@id_reloj", Convert.ToInt32(id_reloj));


            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region HabilitarAuto

        public static int HabilitarAuto(string id_auto)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_HABILITAR_AUTO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_taxi", Convert.ToInt32(id_auto));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion
        #endregion

        #region Chofer
        #region BuscarChoferes

        public static DataTable ObtenerChoferes(string nombre,
                                                string apellido,
                                                string dni,
                                                int traerTodos)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_BUSCAR_CHOFERES;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;    //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@NOMBRE", nombre);                          // pone @PARAMETRO
            spCmdParams.AddWithValue("@APELLIDO", apellido);
            if (dni == "")
            {
                spCmdParams.AddWithValue("@DNI", -1);
            }
            else
            {
                spCmdParams.AddWithValue("@DNI", Convert.ToInt32(dni));
            }
            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaChoferes");
            DataColumn ID = new DataColumn("ID");
            DataColumn Nombre = new DataColumn("Nombre");
            DataColumn Apellido = new DataColumn("Apellido");
            DataColumn DNI = new DataColumn("DNI");
            DataColumn Mail = new DataColumn("Mail");
            DataColumn Telefono = new DataColumn("Telefono");
            DataColumn Direccion = new DataColumn("Direccion");
            DataColumn FechaDeNacimiento = new DataColumn("FechaDeNacimiento");
            DataColumn Estado = new DataColumn("Estado");
            DataColumn Seleccionar = new DataColumn("Seleccionar");

            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Nombre);
            dtResult.Columns.Add(Apellido);
            dtResult.Columns.Add(DNI);
            dtResult.Columns.Add(Mail);
            dtResult.Columns.Add(Telefono);
            dtResult.Columns.Add(Direccion);
            dtResult.Columns.Add(FechaDeNacimiento);
            dtResult.Columns.Add(Estado);
            dtResult.Columns.Add(Seleccionar);

            while (drResultado.Read())
            {
                if (traerTodos == 1 || Convert.ToInt32(drResultado["estado"].ToString()) == 1)
                {
                    dtResult.Rows.Add(
                                      drResultado["id_chofer"].ToString(),
                                      drResultado["nombre"].ToString(),
                                      drResultado["apellido"].ToString(),
                                      drResultado["dni"].ToString(),
                                      drResultado["mail"].ToString(),
                                      drResultado["telefono"].ToString(),
                                      drResultado["direccion"].ToString(),
                                      drResultado["fecha_nacimiento"].ToString(),
                                      drResultado["estado"].ToString(),
                                      "Seleccionar Chofer");
                }
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }

        #endregion

        #region AgregarChofer

        public static int AgregarChofer(string nombre,
                                          string apellido,
                                          string dni,
                                          string mail,
                                          string telefono,
                                          string direccion,
                                          string fechaDeNacimiento
                                          )
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ALTA_CHOFER;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@nombre", nombre);
            spCmdParams.AddWithValue("@apellido", apellido);
            spCmdParams.AddWithValue("@dni", Convert.ToInt32(dni));
            spCmdParams.AddWithValue("@mail", mail);
            spCmdParams.AddWithValue("@telefono", telefono);
            spCmdParams.AddWithValue("@direccion", direccion);
            spCmdParams.AddWithValue("@fecha_nacimiento", Convert.ToDateTime(fechaDeNacimiento));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion

        #region BajaChofer
        public static int BajaChofer(int id_chofer)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_BAJA_CHOFER;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_chofer", id_chofer);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region ModificarChofer
        public static int ModificarChofer(int id_chofer,
                                          string nombre,
                                          string apellido,
                                          string dni,
                                          string mail,
                                          string telefono,
                                          string direccion,
                                          string fechaDeNacimiento
                                          )
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_MODIFICACION_CHOFER;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_chofer", id_chofer);
            spCmdParams.AddWithValue("@nombre", nombre);
            spCmdParams.AddWithValue("@apellido", apellido);
            spCmdParams.AddWithValue("@dni", Convert.ToInt32(dni));
            spCmdParams.AddWithValue("@mail", mail);
            spCmdParams.AddWithValue("@telefono", telefono);
            spCmdParams.AddWithValue("@direccion", direccion);
            spCmdParams.AddWithValue("@fecha_nacimiento", Convert.ToDateTime(fechaDeNacimiento));


            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region HabilitarChofer

        public static int HabilitarChofer(string id_chofer)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_HABILITAR_CHOFER;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_chofer", Convert.ToInt32(id_chofer));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion
        #endregion

        #region Cliente
        #region BuscarClientes

        public static DataTable ObtenerClientes(string nombre, string apellido, string dni, int traerTodos)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_BUSCAR_CLIENTES;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;    //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@NOMBRE", nombre);                          // pone @PARAMETRO
            spCmdParams.AddWithValue("@APELLIDO", apellido);
            if (dni == "")
            {
                spCmdParams.AddWithValue("@DNI", -1);
            }
            else
            {
                spCmdParams.AddWithValue("@DNI", Convert.ToInt32(dni));
            }
            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaClientes");
            DataColumn ID = new DataColumn("ID");
            DataColumn Nombre = new DataColumn("Nombre");
            DataColumn Apellido = new DataColumn("Apellido");
            DataColumn DNI = new DataColumn("DNI");
            DataColumn Mail = new DataColumn("Mail");
            DataColumn Telefono = new DataColumn("Telefono");
            DataColumn Direccion = new DataColumn("Direccion");
            DataColumn CodigoPostal = new DataColumn("CodigoPostal");
            DataColumn FechaDeNacimiento = new DataColumn("FechaDeNacimiento");
            DataColumn Estado = new DataColumn("Estado");
            DataColumn Seleccionar = new DataColumn("Seleccionar");

            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Nombre);
            dtResult.Columns.Add(Apellido);
            dtResult.Columns.Add(DNI);
            dtResult.Columns.Add(Mail);
            dtResult.Columns.Add(Telefono);
            dtResult.Columns.Add(Direccion);
            dtResult.Columns.Add(CodigoPostal);
            dtResult.Columns.Add(FechaDeNacimiento);
            dtResult.Columns.Add(Estado);
            dtResult.Columns.Add(Seleccionar);


            while (drResultado.Read())
            {
                //si Traer todos esta habilitado muestra todos, sino solo los habilitados
                if(traerTodos == 1 || Convert.ToInt32(drResultado["estado"].ToString()) == 1){
                dtResult.Rows.Add(
                                  drResultado["id_cliente"].ToString(),
                                  drResultado["nombre"].ToString(),
                                  drResultado["apellido"].ToString(),
                                  drResultado["dni"].ToString(),
                                  drResultado["mail"].ToString(),
                                  drResultado["telefono"].ToString(),
                                  drResultado["direccion"].ToString(),
                                  drResultado["codigo_postal"].ToString(),
                                  drResultado["fecha_nacimiento"].ToString(),
                                  drResultado["estado"].ToString(),
                                  "Seleccionar Cliente");
                }
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
            }
        #endregion

        #region AgregarCliente
        public static int AgregarCliente(string nombre,
                                          string apellido,
                                          string dni,
                                          string mail,
                                          string telefono,
                                          string direccion,
                                          string codigoPostal,
                                          string fechaDeNacimiento
                                          )
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ALTA_CLIENTE;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@nombre", nombre);
            spCmdParams.AddWithValue("@apellido", apellido);
            spCmdParams.AddWithValue("@dni", Convert.ToInt32(dni));
            spCmdParams.AddWithValue("@mail", mail);
            spCmdParams.AddWithValue("@telefono", telefono);
            spCmdParams.AddWithValue("@direccion", direccion);
            spCmdParams.AddWithValue("@codigo_postal", Convert.ToInt32(codigoPostal));
            spCmdParams.AddWithValue("@fecha_nacimiento", Convert.ToDateTime(fechaDeNacimiento));


            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region BajaCliente
        public static int BajaCliente(int id_cliente)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_BAJA_CLIENTE;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@ID_CLIENTE", id_cliente);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region ModificarCliente
        public static int ModificarCliente(int id_cliente,
                                          string nombre,
                                          string apellido,
                                          string dni,
                                          string mail,
                                          string telefono,
                                          string direccion,
                                          string codigoPostal,
                                          string fechaDeNacimiento
                                          )
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_MODIFICACION_CLIENTE;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_cliente", id_cliente);
            spCmdParams.AddWithValue("@nombre", nombre);
            spCmdParams.AddWithValue("@apellido", apellido);
            spCmdParams.AddWithValue("@dni", Convert.ToInt32(dni));
            spCmdParams.AddWithValue("@mail", mail);
            spCmdParams.AddWithValue("@telefono", telefono);
            spCmdParams.AddWithValue("@direccion", direccion);
            spCmdParams.AddWithValue("@codigo_postal", Convert.ToInt32(codigoPostal));
            spCmdParams.AddWithValue("@fecha_nacimiento", Convert.ToDateTime(fechaDeNacimiento));


            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region HabilitarCliente

        public static int HabilitarCliente(string id_cliente)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_HABILITAR_CLIENTE;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_cliente", Convert.ToInt32(id_cliente));
            _dbConnection.Open();
            //(int)spCmd.ExecuteScalar(); ??
            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion
        #endregion

        #region Reloj
        #region BuscarRelojes

        public static DataTable ObtenerRelojes(string marca, string modelo, string numeroDeSerie)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_BUSCAR_RELOJES;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;    //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@MARCA", marca);                          // pone @PARAMETRO
            spCmdParams.AddWithValue("@MODELO", modelo);
            spCmdParams.AddWithValue("@NUMERO_SERIE", numeroDeSerie);

            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaClientes");
            DataColumn ID_Reloj = new DataColumn("ID Reloj");
            DataColumn ID_Marca_Reloj = new DataColumn("ID Marca");
            DataColumn Modelo = new DataColumn("Modelo");
            DataColumn NumeroDeSerie = new DataColumn("NumeroDeSerie");
            DataColumn FechaDeVerificacion = new DataColumn("FechaDeVerificacion");
            DataColumn Estado = new DataColumn("Estado");
            DataColumn Seleccionar = new DataColumn("Seleccionar");

            dtResult.Columns.Add(ID_Reloj);
            dtResult.Columns.Add(ID_Marca_Reloj);
            dtResult.Columns.Add(Modelo);
            dtResult.Columns.Add(NumeroDeSerie);
            dtResult.Columns.Add(FechaDeVerificacion);
            dtResult.Columns.Add(Estado);
            dtResult.Columns.Add(Seleccionar);

            while (drResultado.Read())
            {
                dtResult.Rows.Add(
                                  drResultado["id_reloj_taxi"].ToString(),
                                  drResultado["id_marca_reloj"].ToString(),
                                  drResultado["modelo"].ToString(),
                                  drResultado["numero_serie"].ToString(),
                                  drResultado["fecha_verificacion"].ToString(),
                                  drResultado["estado"].ToString(),
                                  "Seleccionar Reloj");

            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }

        #endregion

        #region AgregarReloj

        public static int AgregarReloj(string marca,
                                       string modelo,
                                       string numero_de_serie,
                                       string fecha_de_verificacion)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ALTA_RELOJ;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@ID_MARCA_RELOJ", Convert.ToInt32(marca));
            spCmdParams.AddWithValue("@MODELO", modelo);
            spCmdParams.AddWithValue("@NUMERO_DE_SERIE", numero_de_serie);
            DateTime hora = Convert.ToDateTime(fecha_de_verificacion);
            spCmdParams.AddWithValue("@FECHA_DE_VERIFICACION", Convert.ToDateTime(fecha_de_verificacion));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion

        #region BajaReloj
        public static int BajaReloj(int id_reloj)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_BAJA_RELOJ;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            //spCmdParams.AddWithValue("@MODELO", modelo);
            //spCmdParams.AddWithValue("@NUMERODESERIE", numeroDeSerie);
            spCmdParams.AddWithValue("@id_reloj", id_reloj);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region ModificarReloj
        public static int ModificarReloj(int id_reloj,
                                          string marca,
                                          string modelo,
                                          string numeroDeSerie,
                                          string fechaDeVerificacion)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_MODIFICACION_RELOJ;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_reloj_taxi", id_reloj);
            spCmdParams.AddWithValue("@id_marca_reloj", Convert.ToInt32(marca));
            spCmdParams.AddWithValue("@modelo", modelo);
            spCmdParams.AddWithValue("@numero_serie", numeroDeSerie);
            spCmdParams.AddWithValue("@fecha_verificacion", Convert.ToDateTime(fechaDeVerificacion));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region HabilitarReloj

        public static int HabilitarReloj(string id_reloj)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_HABILITAR_RELOJ;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_reloj", Convert.ToInt32(id_reloj));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion
        #endregion

        #region Usuario
        #region DarRolUsuario
        public static int DarRolUsuario(string username,
                                        string descripcion_rol)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ROL_USUARIO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@usuario", username);
            spCmdParams.AddWithValue("@descripcion_rol", descripcion_rol);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region Eliminar rol del usuario
        public static int EliminarRolUsuario(string username,
                                        string descripcion_rol)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ELIMINAR_ROL_USUARIO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@usuario", username);
            spCmdParams.AddWithValue("@descripcion_rol", descripcion_rol);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region BuscarUsuarios

        public static DataTable ObtenerUsuarios(string username, int traerTodos)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_BUSCAR_USUARIOS;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;    //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@usuario", username);

            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaUsuarios");
            DataColumn Username = new DataColumn("Username");
            DataColumn Password = new DataColumn("Password");
            DataColumn Estado = new DataColumn("Estado");
            DataColumn Seleccionar = new DataColumn("Seleccionar");

            dtResult.Columns.Add(Username);
            dtResult.Columns.Add(Password);
            dtResult.Columns.Add(Estado);
            dtResult.Columns.Add(Seleccionar);

            while (drResultado.Read())
            {
                if (traerTodos == 1 || Convert.ToInt32(drResultado["estado"].ToString()) == 1)
                {
                    dtResult.Rows.Add(
                                      drResultado["usuario"].ToString(),
                                      drResultado["contraseña"].ToString(),
                                      drResultado["estado"].ToString(),
                                      "Seleccionar Usuario");
                }

            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }

        #endregion

        #region AgregarUsuario

        public static int AgregarUsuario(string nombre,
                                         string password)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ALTA_USUARIO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@usuario", nombre);
            spCmdParams.AddWithValue("@contraseña", password);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion

        #region Baja Usuario
        public static int BajaUsuario(string usuario)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_BAJA_USUARIO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@usuario", usuario);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region Obtener Roles de un Usuario
        public static DataTable ObtenerRolesDelUsuario(string usuario)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_OBTENER_ROLES_USUARIO;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@usuario", usuario);

            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaRoles");
            DataColumn roles = new DataColumn("Rol");

            dtResult.Columns.Add(roles);

            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["descripcion"].ToString());//.ToString()
            }


            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region Modificar Usuario Pass
        public static int ModificarUsuarioPass(string usuario, string pass)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_MODIFICACION_USUARIO_CONTRASEÑA;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@USUARIO", usuario);
            spCmdParams.AddWithValue("@CONTRASEÑA", pass);

            _dbConnection.Open();

            int resultado = (int)spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return resultado;
        }

        #endregion

        #region HabilitarUsuario

        public static int HabilitarUsuario(string usuario)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_HABILITAR_USUARIO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@usuario", usuario);

            _dbConnection.Open();

            int result = (int)spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion
        #endregion 

        #region Turno
        #region BuscarTurnos
        public static DataTable ObtenerTurnos(string descripcion,
                                                int traerTodos)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_BUSCAR_TURNO;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;    //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@DESCRIPCION", descripcion);                          // pone @PARAMETRO
       
            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaChoferes");
            DataColumn ID = new DataColumn("ID");
            DataColumn Descripcion = new DataColumn("Descripcion");
            DataColumn Hora_Inicio = new DataColumn("Hora Inicio");
            DataColumn Hora_Fin = new DataColumn("Hora Fin");
            DataColumn Valor_Bandera = new DataColumn("Valor Bandera");
            DataColumn Valor_Ficha = new DataColumn("Valor Ficha");
            DataColumn Estado = new DataColumn("Estado");
            DataColumn Seleccionar = new DataColumn("Seleccionar");

            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Descripcion);
            dtResult.Columns.Add(Hora_Inicio);
            dtResult.Columns.Add(Hora_Fin);
            dtResult.Columns.Add(Valor_Bandera);
            dtResult.Columns.Add(Valor_Ficha);
            dtResult.Columns.Add(Estado);
            dtResult.Columns.Add(Seleccionar);
            

            while (drResultado.Read())
            {
                if (traerTodos == 1 || Convert.ToInt32(drResultado["estado"].ToString()) == 1)
                {
                    dtResult.Rows.Add(
                                      drResultado["id_turno"].ToString(),
                                      drResultado["descripcion"].ToString(),
                                      drResultado["hora_inicio"].ToString(),
                                      drResultado["hora_fin"].ToString(),
                                      drResultado["valor_bandera"].ToString(),
                                      drResultado["valor_ficha"].ToString(),
                                      drResultado["estado"].ToString(),
                                      "Seleccionar Turno" );
                }
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region AgregarTurno
        public static int AgregarTurno(string descripcion,
                                   string hora_inicio,
                                   string hora_fin,
                                   string valor_bandera,
                                   string valor_ficha
                                   )
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ALTA_TURNO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@descripcion", descripcion);
            spCmdParams.AddWithValue("@hora_inicio", Convert.ToInt32(hora_inicio));
            spCmdParams.AddWithValue("@hora_fin", Convert.ToInt32(hora_fin));
            spCmdParams.AddWithValue("@valor_bandera", Convert.ToDouble(valor_bandera)); //Numeric(18,2)
            spCmdParams.AddWithValue("@valor_ficha", Convert.ToDouble(valor_ficha)); //Numeric(18,2)

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion

        #region Baja Turno

        public static int BajaTurno(int id_turno)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_BAJA_TURNO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_turno", id_turno);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }

        #endregion

        #region Modificacion Turno

        public static int ModificarTurno(int id_turno,
                                          string descripcion,
                                          string hora_inicio,
                                          string hora_fin,
                                          string valor_bandera,
                                          string valor_ficha
                                          )
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_MODIFICACION_TURNO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_turno", id_turno);
            spCmdParams.AddWithValue("@descripcion", descripcion);
            spCmdParams.AddWithValue("@hora_inicio", Convert.ToInt32(hora_inicio));
            spCmdParams.AddWithValue("@hora_fin", Convert.ToInt32(hora_fin));
            spCmdParams.AddWithValue("@valor_bandera", Convert.ToDouble(valor_bandera));
            spCmdParams.AddWithValue("@valor_ficha", Convert.ToDouble(valor_ficha));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }

        #endregion

        #region HabilitarTurno

        public static int HabilitarTurno(string id_turno)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_HABILITAR_TURNO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_turno", Convert.ToInt32(id_turno));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion
        #endregion

        #region Rol
        #region Agregar Rol
        public static int AgregarRol(string descripcion)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ALTA_ROL;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@descripcion", descripcion);

            _dbConnection.Open();

            int id_rol = (int)spCmd.ExecuteScalar();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return id_rol;
        }

        #endregion

        #region Modificar Rol
        public static int ModificarRol(int id_rol, string descripcion)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_MODIFICACION_ROL;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_rol", id_rol);
            spCmdParams.AddWithValue("@descripcion", descripcion);

            _dbConnection.Open();

            int resultado = (int)spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return resultado;
        }

        #endregion

        #region Asignar Rol Funcionalidad
        public static void AsignarRolFuncionalidad(int id_rol, int id_funcionalidad)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ASIGNAR_FUNCIONALIDAD_ROL;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_funcionalidad", id_funcionalidad);
            spCmdParams.AddWithValue("@id_rol", id_rol);

            _dbConnection.Open();

            spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

        }
        #endregion

        #region SacarRolFuncionalidad
        public static void SacarRolFuncionalidad(int id_rol, int id_funcionalidad)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ELIMINAR_FUNCIONALIDAD_ROL;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("id_funcionalidad", id_funcionalidad);
            spCmdParams.AddWithValue("id_rol", id_rol);

            _dbConnection.Open();
            spCmd.ExecuteNonQuery();
            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();
        }
        #endregion

        #region Buscar Rol
        public static DataTable BuscarRoles(int traerTodos)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_OBTENER_ROLES;       //le dice q sp va a usar      


            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaRoles");
            DataColumn ID = new DataColumn("ID");
            DataColumn Descripcion = new DataColumn("Descripcion");
            DataColumn Estado = new DataColumn("Estado");
            DataColumn Seleccionar = new DataColumn("Selecionar");

            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Descripcion);
            dtResult.Columns.Add(Estado);
            dtResult.Columns.Add(Seleccionar);

            while (drResultado.Read())
            {
                if (traerTodos == 1 || Convert.ToInt32(drResultado["estado"].ToString()) == 1)
                {
                    dtResult.Rows.Add(
                                      drResultado["id_rol"].ToString(),
                                      drResultado["descripcion"].ToString(),
                                      drResultado["estado"].ToString(),
                                      "Seleccionar ROL");
                }
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region Obtener Funcionalidades de un Rol
        public static DataTable ObtenerFuncionalidadesRol(int id_rol)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_OBTENER_FUNCIONALIDAD_ROL;       //le dice q sp va a usar      
            
            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_rol", id_rol);
            
            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaRoles");
            DataColumn ID = new DataColumn("ID Funcionalidad");

            dtResult.Columns.Add(ID);

            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["id_funcionalidad"].ToString());//.ToString()
            }


            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region Baja Rol
        public static int BajaRol(int id_rol)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_BAJA_ROL;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_rol", id_rol);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }
        #endregion
        
        #region HabilitarRol

        public static int HabilitarRol(string id_rol)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_HABILITAR_ROL;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_rol", Convert.ToInt32(id_rol));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion
        #endregion
        #endregion

        //Asignar Chofer auto

        #region Asignar Chofer Auto
        public static int AsignarChoferAuto(int id_chofer,
                                            int id_auto,
                                            string fecha,
                                            int id_turno
                                          )
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_ASIGNAR_CHOFER_AUTO;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_chofer", id_chofer);
            spCmdParams.AddWithValue("@id_taxi", id_auto);
            spCmdParams.AddWithValue("@fecha", Convert.ToDateTime(fecha));
            spCmdParams.AddWithValue("@id_turno", id_turno);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;


        }
        #endregion

        //Facturar Clientes

        #region ObtenerViajes
        public static DataTable ObtenerViajes(string fechainicio, string fechafin, int id_cliente)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_OBTENER_VIAJES;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;                //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@id_cliente", id_cliente);                                   // pone @PARAMETRO
            spCmdParams.AddWithValue("@fecha_inicial_viaje", Convert.ToDateTime(fechainicio));
            spCmdParams.AddWithValue("@fecha_final_viaje", Convert.ToDateTime(fechafin));

            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();                    //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaViajes");
            DataColumn col_nombre_chofer = new DataColumn("Nombre Chofer");
            DataColumn col_apellid_chofer = new DataColumn("Apellido Chofer");
            DataColumn col_desc_turno = new DataColumn("Turno");
            DataColumn col_cant_fichas = new DataColumn("Cantidad de Fichas");
            DataColumn col_fecha_hora_inicio = new DataColumn("Fecha y Hora Inicio");

            dtResult.Columns.Add(col_nombre_chofer);
            dtResult.Columns.Add(col_apellid_chofer);
            dtResult.Columns.Add(col_desc_turno);
            dtResult.Columns.Add(col_cant_fichas);
            dtResult.Columns.Add(col_fecha_hora_inicio);

            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["nombre"].ToString(),
                                  drResultado["apellido"].ToString(),
                                  drResultado["descripcion"].ToString(),
                                  drResultado["cantidad_fichas_viaje"].ToString(),
                                  drResultado["fecha_hora_inicial_viaje"].ToString());

            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region ObtenerImporteTotal
        public static double ObtenerImporteTotal(string fecha_inicio, string fecha_fin, int id_cliente)
        {
            double importe_total = -1;
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_OBTENER_IMPORTE_TOTAL_CLIENTE; //Cambiar SP
            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_cliente", id_cliente);
            DateTime fi = Convert.ToDateTime(fecha_inicio);
            DateTime ff = Convert.ToDateTime(fecha_fin);
            spCmdParams.AddWithValue("@fecha_inicial_viaje", Convert.ToDateTime(fecha_inicio));
            spCmdParams.AddWithValue("@fecha_final_viaje", Convert.ToDateTime(fecha_fin));
            
            _dbConnection.Open();
            
            //importe_total = (int)spCmd.ExecuteScalar();
            importe_total = Convert.ToDouble(spCmd.ExecuteScalar());
            
            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return importe_total;
        }
        #endregion

        #region FacturarCliente

        public static int FacturarCliente(string fecha_inicio,
                                          string fecha_fin,
                                          int id_cliente,
                                          string importe_total)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_FACTURAR_CLIENTE;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_cliente", id_cliente);
            spCmdParams.AddWithValue("@fecha_inicio", Convert.ToDateTime(fecha_inicio));
            spCmdParams.AddWithValue("@fecha_final", Convert.ToDateTime(fecha_fin));
            spCmdParams.AddWithValue("@importe_total", Convert.ToDouble(importe_total));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion

        #region FacturaracionItem

        public static void FacturaracionItem(string fecha_inicio,
                                            string fecha_fin,
                                            int id_cliente)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_FACTURAR_ITEM;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_cliente", id_cliente);
            spCmdParams.AddWithValue("@fecha_inicio", Convert.ToDateTime(fecha_inicio));
            spCmdParams.AddWithValue("@fecha_fin", Convert.ToDateTime(fecha_fin));

            _dbConnection.Open();

            spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return;
        }


        #endregion

        //Registrar Viaje
        #region RegistrarViaje

        public static int RegistrarViaje(string tipo_viaje,
                                          int id_chofer,
                                          int id_turno,
                                          string cantidad_fichas,
                                          DateTime fecha_hora,
                                          int id_cliente)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_REGISTRAR_VIAJE;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@tipo_viaje", tipo_viaje);
            spCmdParams.AddWithValue("@id_chofer", id_chofer);
            spCmdParams.AddWithValue("@id_turno", id_turno);
            spCmdParams.AddWithValue("@cantidad_fichas_viaje", Convert.ToInt32(cantidad_fichas));
            spCmdParams.AddWithValue("@fecha_hora_inicial_viaje", fecha_hora);
            spCmdParams.AddWithValue("@id_cliente", id_cliente);

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion

        //Facturar Chofer
        #region ObtenerViajesChofer
        public static DataTable ObtenerViajesChofer(string fecha, int id_chofer, string id_turno)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_OBTENER_VIAJES_CHOFER;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;                //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@fecha", Convert.ToDateTime(fecha));                                   // pone @PARAMETRO
            spCmdParams.AddWithValue("@id_chofer", id_chofer);
            spCmdParams.AddWithValue("@id_turno", Convert.ToInt32(id_turno));

            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();                    //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaViajes");
            DataColumn ID_Chofer = new DataColumn("ID Chofer");
            DataColumn ID_Turno = new DataColumn("ID Turno");
            DataColumn Fecha_Hora_Inicial = new DataColumn("Fecha y Hora");
            DataColumn Valor_Bandera = new DataColumn("Valor Bajada de Bandera");
            DataColumn Valor_Ficha = new DataColumn("Valor de Ficha");
            DataColumn Cantidad_Fichas_Viaje = new DataColumn("Cantidad de Fichas");

            dtResult.Columns.Add(ID_Chofer);
            dtResult.Columns.Add(ID_Turno);
            dtResult.Columns.Add(Fecha_Hora_Inicial);
            dtResult.Columns.Add(Valor_Bandera);
            dtResult.Columns.Add(Valor_Ficha);
            dtResult.Columns.Add(Cantidad_Fichas_Viaje);

            while (drResultado.Read())
            {
                dtResult.Rows.Add(drResultado["id_chofer"].ToString(),
                                  drResultado["id_turno"].ToString(),
                                  drResultado["fecha_hora_inicial_viaje"].ToString(),
                                  drResultado["valor_bandera"].ToString(),
                                  drResultado["valor_ficha"].ToString(),
                                  drResultado["cantidad_fichas_viaje"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }
        #endregion

        #region ObtenerImporteTotalChofer
        public static double ObtenerImporteTotalChofer(string fecha, int id_chofer, string id_turno)
        {
            double importe_total = -1;
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_OBTENER_IMPORTE_TOTAL_CHOFER;
            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@fecha", Convert.ToDateTime(fecha));
            spCmdParams.AddWithValue("@id_chofer",id_chofer);
            spCmdParams.AddWithValue("@id_turno", Convert.ToInt32(id_turno));

            _dbConnection.Open();

            importe_total = Convert.ToDouble(spCmd.ExecuteScalar());

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return importe_total;
        }
        #endregion

        #region FacturarChofer

        public static int FacturarChofer(string fecha,
                                         int id_chofer,
                                         string id_turno,
                                         string importe_total)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_FACTURAR_CHOFER;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_chofer", id_chofer);
            spCmdParams.AddWithValue("@fecha", Convert.ToDateTime(fecha));
            spCmdParams.AddWithValue("@id_turno", Convert.ToInt32(id_turno));
            spCmdParams.AddWithValue("@importe_total", Convert.ToDouble(importe_total));

            _dbConnection.Open();

            int result = spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return result;
        }


        #endregion

        #region RendicionItem

        public static void RendicionItem(string fecha,
                                         int id_chofer,
                                         string id_turno)
        {
            SqlCommand spCmd = new SqlCommand();
            spCmd.Connection = _dbConnection;
            spCmd.CommandType = CommandType.StoredProcedure;
            spCmd.CommandText = Storeds.SP_RENDIR_ITEM;

            SqlParameterCollection spCmdParams = spCmd.Parameters;
            spCmdParams.AddWithValue("@id_chofer", id_chofer);
            spCmdParams.AddWithValue("@fecha", Convert.ToDateTime(fecha));
            spCmdParams.AddWithValue("@id_turno", Convert.ToInt32(id_turno));
            _dbConnection.Open();

            spCmd.ExecuteNonQuery();

            spCmdParams.Clear();
            spCmd.Dispose();
            _dbConnection.Close();

            return;
        }


        #endregion

        #region Listados Estadisticos
        #region Listado Chofer

        public static DataTable ListadoEstadisticoChoferes(DateTime fecha_inicio, DateTime fecha_fin)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_LISTADO_ESTADISTICO_CHOFER;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;    //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@fecha_inicial", fecha_inicio);
            spCmdParams.AddWithValue("@fecha_final", fecha_fin);

            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaChoferes");

            DataColumn ID = new DataColumn("ID");
            DataColumn Nombre = new DataColumn("Nombre");
            DataColumn Apellido = new DataColumn("Apellido");
            DataColumn ImporteTotal = new DataColumn("ImporteTotal");

            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Nombre);
            dtResult.Columns.Add(Apellido);
            dtResult.Columns.Add(ImporteTotal);

            while (drResultado.Read())
            {
                dtResult.Rows.Add(
                                  drResultado["ID_CHOFER"].ToString(),
                                  drResultado["NOMBRE"].ToString(),
                                  drResultado["APELLIDO"].ToString(),
                                  drResultado["IMPORTE_TOTAL"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }

        #endregion

        #region Listado Cliente

        public static DataTable ListadoEstadisticoClientes(DateTime fecha_inicio, DateTime fecha_fin)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_LISTADO_ESTADISTICO_CLIENTE;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;    //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp

            spCmdParams.AddWithValue("@fecha_inicial", fecha_inicio);
            spCmdParams.AddWithValue("@fecha_final", fecha_fin);

            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaClientes");

            DataColumn ID = new DataColumn("ID");
            DataColumn Nombre = new DataColumn("Nombre");
            DataColumn Apellido = new DataColumn("Apellido");
            DataColumn DNI = new DataColumn("DNI");
            DataColumn Telefono = new DataColumn("Telefono");
            DataColumn ImporteTotal = new DataColumn("Importe Total");

            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Nombre);
            dtResult.Columns.Add(Apellido);
            dtResult.Columns.Add(DNI);
            dtResult.Columns.Add(Telefono);
            dtResult.Columns.Add(ImporteTotal);

            while (drResultado.Read())
            {
                dtResult.Rows.Add(
                                  drResultado["id_cliente"].ToString(),
                                  drResultado["nombre"].ToString(),
                                  drResultado["apellido"].ToString(),
                                  drResultado["dni"].ToString(),
                                  drResultado["telefono"].ToString(),
                                  drResultado["importe_total"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }

        #endregion

        #region Listado Taxis

        public static DataTable ListadoEstadisticoTaxis(DateTime fecha_inicio, DateTime fecha_fin)
        {
            SqlCommand spCmd = new SqlCommand();   //crea un objeto para hacer la consulta
            spCmd.Connection = _dbConnection;       // le dice q tipo de coneccion es    
            spCmd.CommandType = CommandType.StoredProcedure;           // setea propiedades de la consulta
            spCmd.CommandText = Storeds.SP_LISTADO_ESTADISTICO_TAXI;       //le dice q sp va a usar      

            SqlParameterCollection spCmdParams = spCmd.Parameters;    //crea un objeto del tipo collecion de parametros q y le asigna los parametros del sp
            spCmdParams.AddWithValue("@fecha_inicial", fecha_inicio);
            spCmdParams.AddWithValue("@fecha_final", fecha_fin);

            _dbConnection.Open();                                            //abre la coneccion con la base

            SqlDataReader drResultado = spCmd.ExecuteReader();   //crea un objeto data reader, y le asigna la ejecucion de ese store procedure comand 

            DataTable dtResult = new DataTable("tablaTaxis");

            DataColumn ID = new DataColumn("ID");
            DataColumn Marca = new DataColumn("Marca");
            DataColumn Modelo = new DataColumn("Modelo");
            DataColumn Patente = new DataColumn("Patente");
            DataColumn Licencia = new DataColumn("Licencia");
            DataColumn Rodado = new DataColumn("Rodado");
            DataColumn ImporteTotal = new DataColumn("Importe Total");

            dtResult.Columns.Add(ID);
            dtResult.Columns.Add(Marca);
            dtResult.Columns.Add(Modelo);
            dtResult.Columns.Add(Patente);
            dtResult.Columns.Add(Licencia);
            dtResult.Columns.Add(Rodado);
            dtResult.Columns.Add(ImporteTotal);

            while (drResultado.Read())
            {
                dtResult.Rows.Add(
                                  drResultado["ID_TAXI"].ToString(),
                                  drResultado["DESCRIPCION_MARCA_TAXI"].ToString(),
                                  drResultado["MODELO_TAXI"].ToString(),
                                  drResultado["PATENTE"].ToString(),
                                  drResultado["LICENCIA"].ToString(),
                                  drResultado["RODADO"].ToString(),
                                  drResultado["IMPORTE_TOTAL"].ToString());
            }

            spCmd.Dispose();
            _dbConnection.Close();

            return dtResult;
        }

        #endregion
        #endregion

        #region Storeds
        static class Storeds
        {
            //LOGIN
            public static string SP_VALIDAR_USUARIO = "LOS_TIJERITAS.VALIDAR_USUARIO";
            public static string SP_FUNCIONALIDADES_USUARIO = "LOS_TIJERITAS.FUNCIONALIDAD_USUARIO";

            #region ABMs
            //Cliente
            public static string SP_BUSCAR_CLIENTES = "LOS_TIJERITAS.BUSCAR_CLIENTE";
            public static string SP_ALTA_CLIENTE = "LOS_TIJERITAS.ALTA_CLIENTE";
            public static string SP_BAJA_CLIENTE = "LOS_TIJERITAS.BAJA_CLIENTE";
            public static string SP_MODIFICACION_CLIENTE = "LOS_TIJERITAS.MODIFICACION_CLIENTE";
            public static string SP_HABILITAR_CLIENTE = "LOS_TIJERITAS.HABILITAR_CLIENTE";
            
            //Chofer
            public static string SP_BUSCAR_CHOFERES = "LOS_TIJERITAS.BUSCAR_CHOFER";
            public static string SP_ALTA_CHOFER = "LOS_TIJERITAS.ALTA_CHOFER";
            public static string SP_BAJA_CHOFER = "LOS_TIJERITAS.BAJA_CHOFER";
            public static string SP_MODIFICACION_CHOFER = "LOS_TIJERITAS.MODIFICACION_CHOFER";
            public static string SP_HABILITAR_CHOFER = "LOS_TIJERITAS.HABILITAR_CHOFER";
            
            //Auto
            public static string SP_ALTA_AUTO = "LOS_TIJERITAS.ALTA_AUTO";
            public static string SP_BAJA_AUTO = "LOS_TIJERITAS.BAJA_AUTO";
            public static string SP_MODIFICACION_AUTO = "LOS_TIJERITAS.MODIFICACION_AUTO";
            public static string SP_HABILITAR_AUTO = "LOS_TIJERITAS.HABILITAR_AUTO";
            public static string SP_BUSCAR_AUTOS = "LOS_TIJERITAS.BUSCAR_AUTO";
            public static string SP_OBTENER_MARCAS_AUTO = "LOS_TIJERITAS.LISTAR_MARCA_AUTO";
            public static string SP_OBTENER_TODOS_LOS_RELOJES = "LOS_TIJERITAS.LISTAR_RELOJ_TAXI";
            public static string SP_OBTENER_RELOJES_MODIFICACION_AUTO = "LOS_TIJERITAS.LISTAR_MODELO_RELOJ_TAXI_PARA_MODIFICAR";
            
            //Reloj
            public static string SP_ALTA_RELOJ = "LOS_TIJERITAS.ALTA_RELOJ";
            public static string SP_BUSCAR_RELOJES = "LOS_TIJERITAS.BUSCAR_RELOJ";
            public static string SP_BAJA_RELOJ = "LOS_TIJERITAS.BAJA_RELOJ";
            public static string SP_MODIFICACION_RELOJ = "LOS_TIJERITAS.MODIFICACION_RELOJ";
            public static string SP_HABILITAR_RELOJ = "LOS_TIJERITAS.HABILITAR_RELOJ";
            public static string SP_OBTENER_MARCAS_RELOJ = "LOS_TIJERITAS.LISTAR_MARCA_RELOJ";
            public static string SP_OBTENER_RELOJES = "LOS_TIJERITAS.LISTAR_MODELO_RELOJ_TAXI";

            //Turno
            public static string SP_BUSCAR_TURNO = "LOS_TIJERITAS.BUSCAR_TURNO_DESCRIPCION";
            public static string SP_ALTA_TURNO = "LOS_TIJERITAS.ALTA_TURNO";
            public static string SP_BAJA_TURNO = "LOS_TIJERITAS.BAJA_TURNO";
            public static string SP_MODIFICACION_TURNO = "LOS_TIJERITAS.MODIFICACION_TURNO";
            public static string SP_HABILITAR_TURNO = "LOS_TIJERITAS.HABILITAR_TURNO";
            
            //Usuario
            public static string SP_BUSCAR_USUARIOS = "LOS_TIJERITAS.BUSCAR_USUARIO";
            public static string SP_ALTA_USUARIO = "LOS_TIJERITAS.ALTA_USUARIO";
            public static string SP_HABILITAR_USUARIO = "LOS_TIJERITAS.HABILITAR_USUARIO";
            public static string SP_OBTENER_ROLES = "LOS_TIJERITAS.LISTAR_ROL";
            public static string SP_ROL_USUARIO = "LOS_TIJERITAS.ASIGNAR_ROL_USUARIO";
            public static string SP_ELIMINAR_ROL_USUARIO = "LOS_TIJERITAS.ELIMINAR_ROL_USUARIO";
            public static string SP_BAJA_USUARIO = "LOS_TIJERITAS.BAJA_USUARIO";
            public static string SP_OBTENER_ROLES_USUARIO = "LOS_TIJERITAS.LISTAR_ROL_USUARIO";
            public static string SP_MODIFICACION_USUARIO_CONTRASEÑA = "LOS_TIJERITAS.MODIFICACION_USUARIO_CONTRASEÑA";


            //Rol
            public static string SP_ALTA_ROL = "LOS_TIJERITAS.ALTA_ROL";
            public static string SP_MODIFICACION_ROL = "LOS_TIJERITAS.MODIFICACION_ROL";
            public static string SP_OBTENER_FUNCIONALIDAD_ROL = "LOS_TIJERITAS.FUNCIONALIDAD_DEL_ROL";
            public static string SP_ASIGNAR_FUNCIONALIDAD_ROL = "LOS_TIJERITAS.ASIGNAR_FUNCIONALIDAD_ROL";
            public static string SP_ELIMINAR_FUNCIONALIDAD_ROL = "LOS_TIJERITAS.ELIMINAR_FUNCIONALIDAD_ROL"; //REVISAR?
            public static string SP_HABILITAR_ROL = "LOS_TIJERITAS.HABILITAR_ROL";
            public static string SP_BAJA_ROL = "LOS_TIJERITAS.BAJA_ROL";
            #endregion

            #region Otras funcionalidades
            //Facturar Clientes
            public static string SP_OBTENER_VIAJES = "LOS_TIJERITAS.OBTENER_VIAJES";
            public static string SP_FACTURAR_CLIENTE = "LOS_TIJERITAS.FACTURACION_CLIENTE";
            public static string SP_OBTENER_IMPORTE_TOTAL_CLIENTE = "LOS_TIJERITAS.CALCULAR_IMPORTE_TOTAL_CLIENTE_INTERVALO";
            public static string SP_FACTURAR_ITEM = "LOS_TIJERITAS.AGREGAR_VIAJES_ITEM_FACTURACION";
            
            //Asignar Chofer Auto
            public static string SP_ASIGNAR_CHOFER_AUTO = "LOS_TIJERITAS.ALTA_CHOFER_TAXI";

            //Listado Estadistico
            public static string SP_LISTADO_ESTADISTICO_CHOFER = "LOS_TIJERITAS.CHOFERES_MAYOR_RECAUDACION";
            public static string SP_LISTADO_ESTADISTICO_CLIENTE = "LOS_TIJERITAS.CLIENTE_MAYOR_CONSUMO";
            public static string SP_LISTADO_ESTADISTICO_TAXI = "LOS_TIJERITAS.TAXI_MAYOR_RECAUDACION";

            //Registrar Viaje
            public static string SP_REGISTRAR_VIAJE = "LOS_TIJERITAS.REGISTRAR_VIAJE";

            //Rendir Viajes
            public static string SP_OBTENER_VIAJES_CHOFER = "LOS_TIJERITAS.JUSTIFICAR_IMPORTE_TOTAL";
            public static string SP_OBTENER_IMPORTE_TOTAL_CHOFER = "LOS_TIJERITAS.CALCULAR_IMPORTE_TOTAL_FECHA_FIJA";
            public static string SP_OBTENER_TURNOS = "LOS_TIJERITAS.LISTAR_TURNOS";
            public static string SP_FACTURAR_CHOFER = "LOS_TIJERITAS.RENDICION_CUENTA";
            public static string SP_RENDIR_ITEM = "LOS_TIJERITAS.AGREGAR_VIAJES_ITEM_RENDICION";
            #endregion
        }
        #endregion
    }
}